热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

|NO.Z.00215|——————————|^^标准^^|——|KuberNetes&高级调度.V18|——|Topology.v02|Topology实现多地多机房部署|

一、拓扑域划分示例二、使用Topology实现多地多机房部署###---使用Topology实现多机柜部署~~~模拟一下5个节点是属于同一个机房不同机柜的,为其打标签[root@k

一、拓扑域划分示例



二、使用Topology实现多地多机房部署

### --- 使用Topology实现多机柜部署
~~~ 模拟一下5个节点是属于同一个机房不同机柜的,为其打标签
[root@k8s-master01 ~]# kubectl label node k8s-master01 k8s-node01 jigui=1
node/k8s-master01 labeled
node/k8s-node01 labeled
[root@k8s-master01 ~]# kubectl label node k8s-master02 k8s-node02 jigui=2
node/k8s-master02 labeled
node/k8s-node02 labeled
[root@k8s-master01 ~]# kubectl label node k8s-master03 jigui=3
node/k8s-master03 labeled

### --- 改成机柜的来划分拓扑域
~~~ 是按照机柜来划分的拓扑域,在这个机柜里面,只能部署一个k8s-app=demo-nginx这个应用。
[root@k8s-master01 ~]# kubectl edit deploy demo-nginx
spec:
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- demo-nginx
topologyKey: jigui

### --- replace容器,查看pod部署位置
~~~ 之前的2个删除掉之后,pending状态的才可以被部署掉。
~~~ 因为根据刚才打的标签,k8s-master01和k8s-node01;
~~~ k8s-master02和k8s-node02,k8s-master03分别都是一个拓扑域,
~~~ 现在每个拓扑域上都有一个pod了,所以说这个Pending状态的demo-nginx就没有地方去部署了,
~~~ 因为每个拓扑域已经部署了一个
~~~ 在Terminating状态删除掉之后,它就会部署在其它的节点。
~~~ 但是不能是k8s-master02节点,因为k8s-master02已经占据了一个拓扑域,
~~~ 它只能部署在k8s-master02所在拓扑域之外的拓扑域。

[root@k8s-master01 ~]# kubectl get po -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
busybox 1/1 Running 3 13h 172.25.92.90 k8s-master02
demo-nginx-5cb4fd6867-2c6d8 0/2 Pending 0 24s
demo-nginx-5cb4fd6867-wg4hc 2/2 Running 0 25s 172.25.92.93 k8s-master02
demo-nginx-7c464c79f7-hg4rm 0/2 Terminating 0 12h k8s-master03
demo-nginx-7c464c79f7-v7pmw 2/2 Terminating 0 12h 172.17.125.35 k8s-node01

### --- 查看pod部署位置
~~~ 部署在了k8s-master02和k8s-master03节点上
[root@k8s-master01 ~]# kubectl get po -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
busybox 1/1 Running 3 13h 172.25.92.90 k8s-master02
demo-nginx-5cb4fd6867-2c6d8 2/2 Running 0 5m14s 172.18.195.43 k8s-master03
demo-nginx-5cb4fd6867-wg4hc 2/2 Running 0 5m15s 172.25.92.93 k8s-master02

三、把容器扩充到4个节点,验证部署结果

### --- 为容器扩容至4个节点,因为我们只有3个拓扑域,
[root@k8s-master01 ~]# kubectl scale deploy demo-nginx --replicas=4
deployment.apps/demo-nginx scaled

### --- 查看效果
~~~ 每个机柜只能跑一个,根据机柜互斥的原则,只能跑一个,所以第四个pending状态了
[root@k8s-master01 ~]# kubectl get po -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
busybox 1/1 Running 4 13h 172.25.92.90 k8s-master02
demo-nginx-5cb4fd6867-2c6d8 2/2 Running 0 13m 172.18.195.43 k8s-master03
demo-nginx-5cb4fd6867-wg4hc 2/2 Running 0 13m 172.25.92.93 k8s-master02
demo-nginx-5cb4fd6867-wjjzz 0/2 Pending 0 15s
demo-nginx-5cb4fd6867-zbw7w 2/2 Running 0 15s 172.25.244.198 k8s-master01

### --- 把互斥改成软互斥,查看状态
~~~ 因为配置的是软亲和力,不是强一致性的,
~~~ 所以第四个显示pending状态的容器会漂移到其它的节点上面。
~~~ 改写为软亲和力,也就是说一个拓扑域是可以部署2个容器的
[root@k8s-master01 ~]# kubectl edit deploy demo-nginx
spec:
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution: // 将会 required改成preferred软互斥
- weight: 1
podAffinityTerm: // 添加软亲和力参数
labelSelector:
matchExpressions:
- key: app
operator: In
values:
- demo-nginx
topologyKey: jigui

### --- 查看状态
[root@k8s-master01 ~]# kubectl get po -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
busybox 1/1 Running 4 13h 172.25.92.90 k8s-master02
demo-nginx-5cb4fd6867-2c6d8 2/2 Running 0 34m 172.18.195.43 k8s-master03
demo-nginx-5cb4fd6867-wg4hc 2/2 Running 0 34m 172.25.92.93 k8s-master02
demo-nginx-5cb4fd6867-zbw7w 2/2 Running 0 20m 172.25.244.198 k8s-master01
demo-nginx-6bdcdcc585-d56r8 0/2 Pending 0 3m51s
demo-nginx-6bdcdcc585-mhfhl 0/2 Pending 0 63s

### --- 因为有更新环节,所以有2个Pod显示是pending状态,把节点数量设置为0,重新触发容器
[root@k8s-master01 ~]# kubectl scale deploy demo-nginx --replicas=0
deployment.apps/demo-nginx scaled

### --- 重新设置为4个pod,验证部署结果
[root@k8s-master01 ~]# kubectl scale deploy demo-nginx --replicas=4
deployment.apps/demo-nginx scaled

~~~ # 可以看到k8s-master01部署了2个pod,
~~~ 它尽量的不部署在一块,但是若是条件满足不了,但是还是会部署在一块的。
[root@k8s-master01 ~]# kubectl get po -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
busybox 1/1 Running 4 13h 172.25.92.90 k8s-master02
demo-nginx-6bdcdcc585-5wrx9 2/2 Running 0 46s 172.25.92.94 k8s-master02
demo-nginx-6bdcdcc585-cjcm2 2/2 Running 0 46s 172.18.195.44 k8s-master03
demo-nginx-6bdcdcc585-mpvfs 2/2 Running 0 45s 172.25.244.201 k8s-master01
demo-nginx-6bdcdcc585-zc4px 2/2 Running 0 46s 172.25.244.199 k8s-master01


 

 

 

 

 

 

 

 

 



Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart

                                                                                                                                                   ——W.S.Landor



 

 



推荐阅读
  • Kubernetes 持久化存储与数据卷详解
    本文深入探讨 Kubernetes 中持久化存储的使用场景、PV/PVC/StorageClass 的基本操作及其实现原理,旨在帮助读者理解如何高效管理容器化应用的数据持久化需求。 ... [详细]
  • 优化局域网SSH连接延迟问题的解决方案
    本文介绍了解决局域网内SSH连接到服务器时出现长时间等待问题的方法。通过调整配置和优化网络设置,可以显著缩短SSH连接的时间。 ... [详细]
  • 深入理解Redis的数据结构与对象系统
    本文详细探讨了Redis中的数据结构和对象系统的实现,包括字符串、列表、集合、哈希表和有序集合等五种核心对象类型,以及它们所使用的底层数据结构。通过分析源码和相关文献,帮助读者更好地理解Redis的设计原理。 ... [详细]
  • 利用决策树预测NBA比赛胜负的Python数据挖掘实践
    本文通过使用2013-14赛季NBA赛程与结果数据集以及2013年NBA排名数据,结合《Python数据挖掘入门与实践》一书中的方法,展示如何应用决策树算法进行比赛胜负预测。我们将详细讲解数据预处理、特征工程及模型评估等关键步骤。 ... [详细]
  • 本文探讨了如何利用HTML5和JavaScript在浏览器中进行本地文件的读取和写入操作,并介绍了获取本地文件路径的方法。HTML5提供了一系列API,使得这些操作变得更加简便和安全。 ... [详细]
  • 深入解析 Spring Security 用户认证机制
    本文将详细介绍 Spring Security 中用户登录认证的核心流程,重点分析 AbstractAuthenticationProcessingFilter 和 AuthenticationManager 的工作原理。通过理解这些组件的实现,读者可以更好地掌握 Spring Security 的认证机制。 ... [详细]
  • 本文探讨了在Java中实现系统托盘最小化的两种方法:使用SWT库和JDK6自带的功能。通过这两种方式,开发者可以创建跨平台的应用程序,使窗口能够最小化到系统托盘,并提供丰富的交互功能。 ... [详细]
  • Redis Hash 数据结构详解
    本文详细介绍了 Redis 中的 Hash 数据类型及其常用命令。Hash 类型用于存储键值对集合,支持多种操作如插入、查询、更新和删除字段值。此外,文章还探讨了 Hash 类型在实际业务场景中的应用,并提供了优化建议。 ... [详细]
  • 本文将详细探讨Linux pinctrl子系统的各个关键数据结构,帮助读者深入了解其内部机制。通过分析这些数据结构及其相互关系,我们将进一步理解pinctrl子系统的工作原理和设计思路。 ... [详细]
  • 深入解析Redis内存对象模型
    本文详细介绍了Redis内存对象模型的关键知识点,包括内存统计、内存分配、数据存储细节及优化策略。通过实际案例和专业分析,帮助读者全面理解Redis内存管理机制。 ... [详细]
  • 反向投影技术主要用于在大型输入图像中定位特定的小型模板图像。通过直方图对比,它能够识别出最匹配的区域或点,从而确定模板图像在输入图像中的位置。 ... [详细]
  • 本文介绍如何使用 Android 的 Canvas 和 View 组件创建一个简单的绘图板应用程序,支持触摸绘画和保存图片功能。 ... [详细]
  • Nginx 反向代理与负载均衡实验
    本实验旨在通过配置 Nginx 实现反向代理和负载均衡,确保从北京本地代理服务器访问上海的 Web 服务器时,能够依次显示红、黄、绿三种颜色页面以验证负载均衡效果。 ... [详细]
  • 本文深入探讨了MySQL中常见的面试问题,包括事务隔离级别、存储引擎选择、索引结构及优化等关键知识点。通过详细解析,帮助读者在面对BAT等大厂面试时更加从容。 ... [详细]
  • 本文档汇总了Python编程的基础与高级面试题目,涵盖语言特性、数据结构、算法以及Web开发等多个方面,旨在帮助开发者全面掌握Python核心知识。 ... [详细]
author-avatar
谢绝沟通
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有